import axios from 'axios'
import {getStore, removeStore} from "@/plugins/localStore";

function handleRespone(response) {
	let res;
	//session 超时
	if (response.data && response.data.returnCode === 504) {

	}
	// IE9时response.data是undefined，因此需要使用response.request.responseText(Stringify后的字符串)
	if (response.data == undefined) {
		res = response.request.responseText;
	} else {
		res = response.data;
	}
	// console.log('------handleRespone-----')
	// console.log(res)
	// if(res.status == -10000){
	// 	removeStore();
	// 	location.reload()
	// }
	return res;
}

// 创建axios实例
const service = axios.create({
	// 基础url前缀,api的base_url
	// 请求头信息
	headers: {
		// 'X-Requested-With': 'XMLHttpRequest',
		'Content-Type': 'application/json;charset=UTF-8'
	},
	// 参数
	data: {},
	// 设置超时时间
	timeout: 600000,
	// 携带凭证
	withCredentials: true,//是否允许带cookie这些
	// 返回数据类型
	responseType: 'json'
});
//开发环境url过滤白名单
const urlWhiteList = {};
// request拦截器
service.interceptors.request.use(config => {
	config.url = 'api' + config.url;
	if(config.data && config.data.indexOf('notToken') > 0){
		return config;
	}
	let params = config.params;
	if(!params||!params.notToken){
		let user = getStore();
		if(user && user.token){
			let token = user.token.replace('/','');
			config.url = config.url+'/'+"front_token:"+token
		}
	}else{
		delete config.params.notToken;
	}

	return config
}, error => {
	if (error.code === 'ECONNABORTED' && error.message.indexOf('timeout') !== -1) {
		console.log('根据你设置的timeout/真的请求超时 判断请求现在超时了，你可以在这里加入超时的处理方案')
	}
	// 2.需要重定向到错误页面
	const errorInfo = error.response;
	if (errorInfo) {
		// error =errorInfo.data//页面那边catch的时候就能拿到详细的错误信息,看最下边的Promise.reject
		const errorStatus = errorInfo.status; // 404 403 500 ... 等
		this.router.push({
			//path: `/error/${errorStatus}`
			path: '/page404'
		})
	}
	return Promise.reject(error)  // 在调用的那边可以拿到(catch)你想返回的错误信息
})
// respone拦截器
service.interceptors.response.use(
	response => {
		return handleRespone(response);
	},
	error => {
		return Promise.reject(error)
	}
)
export default service

